package com.hiultra.archive.service.impl;

import java.util.List;

import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSON;
import com.hiultra.archive.domain.ArcBox;
import com.hiultra.archive.domain.ArchiveArchArea;
import com.hiultra.archive.domain.ArchiveCabinet;
import com.hiultra.archive.domain.vo.ArcBoxVo;
import com.hiultra.archive.domain.vo.ArchiveBagVo;
import com.hiultra.archive.domain.vo.ResultEntity;
import com.hiultra.archive.mapper.ArcBoxMapper;
import com.hiultra.archive.mapper.ArcCabinetMapper;
import com.hiultra.archive.mapper.ArcShelvesMapper;
import com.hiultra.archive.utils.sgsm.SM2Util;
import com.hiultra.archive.utils.tool.ToolUtils;
import com.hiultra.common.constant.BusinessConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.hiultra.archive.mapper.ArchiveBagMapper;
import com.hiultra.archive.domain.ArchiveBag;
import com.hiultra.archive.service.IArchiveBagService;

import javax.validation.Validator;

/**
 * 档案袋Service业务层处理
 *
 * @author paidaxing
 * @date 2024-09-25
 */
@Service
public class ArchiveBagServiceImpl implements IArchiveBagService {
    @Autowired
    private ArchiveBagMapper archiveBagMapper;
    private static final Logger log = LoggerFactory.getLogger(ArchiveBagServiceImpl.class);
    @Value("${roomNo}")
    private String roomNo;
    @Value("${priKey}")
    private String priKey;

    /**
     * 查询档案袋
     *
     * @param bagId 档案袋主键
     * @return 档案袋
     */
    @Override
    public ArchiveBag selectArchiveBagByBagId(String bagId) {
        return archiveBagMapper.selectArchiveBagByBagId(bagId);
    }

    /**
     * 查询档案袋列表
     *
     * @param archiveBag 档案袋
     * @return 档案袋
     */
    @Override
    public List<ArchiveBag> selectArchiveBagList(ArchiveBag archiveBag) {
        return archiveBagMapper.selectArchiveBagList(archiveBag);
    }

    /**
     * 新增档案袋
     *
     * @param archiveBag 档案袋
     * @return 结果
     */
    @Override
    public int insertArchiveBag(ArchiveBag archiveBag) {
        return archiveBagMapper.insertArchiveBag(archiveBag);
    }

    /**
     * 修改档案袋
     *
     * @param archiveBag 档案袋
     * @return 结果
     */
    @Override
    public int updateArchiveBag(ArchiveBag archiveBag) {
        return archiveBagMapper.updateArchiveBag(archiveBag);
    }

    /**
     * 批量删除档案袋
     *
     * @param bagIds 需要删除的档案袋主键
     * @return 结果
     */
    @Override
    public int deleteArchiveBagByBagIds(String[] bagIds) {
        return archiveBagMapper.deleteArchiveBagByBagIds(bagIds);
    }

    /**
     * 删除档案袋信息
     *
     * @param bagId 档案袋主键
     * @return 结果
     */
    @Override
    public int deleteArchiveBagByBagId(String bagId) {
        return archiveBagMapper.deleteArchiveBagByBagId(bagId);
    }

    /**
     * 新增档案袋
     *
     * @param data 档案袋
     * @return 结果
     */
    @Override
    public ResultEntity insertIssuedArchiveBag(String data) {
        //解密
        System.out.println("档案袋下发入参:" + data);
        String decryptedResult = new SM2Util().decryptBySM2(data, priKey);
        System.out.println("档案袋下发解密结果：" + decryptedResult);
        ArchiveBagVo archiveBagVo = JSON.parseObject(decryptedResult.trim(), ArchiveBagVo.class);
        if (ObjectUtil.isEmpty(archiveBagVo)) {
            log.info("入参解析失败，请检查重试！");
            return ResultEntity.error("入参解析失败，请检查重试！");
        }
        ArchiveBag archiveBag = ToolUtils.convertEntity(archiveBagVo, ArchiveBag::new);
        //判断是否存在
        if (archiveBagMapper.selectArchiveBagByBagId(archiveBag.getBagId()) == null) {
            archiveBagMapper.insertArchiveBag(archiveBag);
        } else if (archiveBagMapper.selectArchiveBagByBagId(archiveBag.getBagId()) != null) {
            archiveBagMapper.updateArchiveBag(archiveBag);
        }

        return ResultEntity.success();
    }
}
